<?

//класс-обертка для работы с БД через стандартную PHP-библиотку PDO
class DB extends Base {
	
	static $db_type;

	protected function __construct()
	{
		self::$db_type = Config::S()->database->type;
		include_once "db/drivers/".self::$db_type.".php";
	}

	/**
	*
	* Возвращает экземпляр класса DB либо создает новое подключение
	*
	* @возрващает object (PDO)
	*
	* @доступ public
	*
	*/
	static public function G($id=null, $config=null)
	{
		if(!$id) $id='DB';
		if (!isset(self::$instances[$id]))
		{
			$config = $config?$config:Config::S();
			$db_type = $config->database->type;
			$hostname = isset($config->database->host)?$config->database->host:'localhost';
			$dbname = isset($config->database->name)?$config->database->name:'';
			$db_password = isset($config->database->password)?$config->database->password:'';
			$db_username = isset($config->database->user)?$config->database->user:'';
			$db_port = isset($config->database->port)?$config->database->port:'';
			$charset = isset($config->database->charset)?$config->database->charset:'utf8';
			$db_type = $db_type == 'mysql' ? $db_type.":host=$hostname;port=$db_port;dbname=$dbname":"$db_type:".__APP_PATH."/$dbname";
			try {
				self::$instances[$id] = new \PDO($db_type, $db_username, $db_password,
				array(\PDO::ATTR_ERRMODE=> \PDO::ERRMODE_EXCEPTION));
			} catch (\PDOException $e) {
				die('<p>Ошибка подключения к БД: '.$e->getMessage()."</p>");
			}
			
			if($db_type=='mysql') {
				if(isset($config->database->collation)) self::$instances[$id]->exec("SET NAMES '".$charset."' COLLATE '".$config->database->collation."'");
				else self::$instances[$id]->exec("SET NAMES '".$charset."' COLLATE '".$charset."_general_ci'");
			}
		}
		return self::$instances[$id];
	}

	function __call($method,$arguments) {
		return Driver::$method($arguments);
	}


	/**
	*
	* Скрываем метод  __clone ,
	* дабы никто не мог клонировать экземпляр
	*
	*/
	private function __clone()
	{
	}


}
?>
